package com.kedi.usercenter.utils;

import com.kedi.usercenter.vo.LoginAction;
import com.kedi.usercenter.vo.RedisUserInfoVo;

import java.util.List;
import java.util.Map;

/**
 * @author Zyred
 * token生成策略
 */
public class TokenGenerationStrategy {

    private String token;

    private String value;


    /**
     * 申token生成策略
     * @param map 用户信息（主键/身份证号码/密码）
     * @param cation 登录端标识{
     *               老人APP端(oldAPP),
     *               老人PC端(oldPC),
     *               社区APP(commAPP),
     *               社区PC(commPC)
     *         }
     */
    public TokenGenerationStrategy(Map map, String cation, List<String> urls){
        String userId = map.get("id") +"";
        String idcard = map.get("idcard") + "";
        String passwd = map.get("password") + "";
        String sbf = new StringBuffer()
                .append(userId)
                .append(idcard)
                .append(passwd)
                .toString();

        this.token = MD5Util.MD5(sbf).toUpperCase() + cation.toUpperCase();

        RedisUserInfoVo user = new RedisUserInfoVo();
        switch (cation){
            case "as" : user.setMode(LoginAction.mode.oldAPPLogin.name()); break;
            case "bs" : user.setMode(LoginAction.mode.oldPCLogin.name()); break;
            case "cs" : user.setMode(LoginAction.mode.commAPPLogin.name()); break;
            case "ds" : user.setMode(LoginAction.mode.commPCLogin.name()); break;
            default: break;
        }
        //获取用户的所有url地址
        user.setUrls(urls);
        //获取用户的姓名
        user.setId(userId);
        //获取用户的身份证信息
        user.setIdcard(idcard);
        //设置用户的密码
        user.setPassword(passwd);

        this.value = user.toString();

    }

    /**
     * 得到key
     * @return
     */
    public String getToken(){
        if(null != token && !token.isEmpty()){
            return this.token;
        }
        return null;
    }


    /**
     * 得到value
     * @return
     */
    public String getValue(){

        if(null != value && !token.isEmpty()){
            return this.value;
        }

        return null;
    }

}
